#ifndef Map_H_
#define Map_H_

//g2o
#include "g2o/core/graph_optimizer_sparse.h"
#include "g2o/core/hyper_graph.h"
#include "g2o/core/block_solver.h"
#include "g2o/core/solver.h"
#include "g2o/solvers/pcg/linear_solver_pcg.h"
#include "g2o/math_groups/se3quat.h"
#include "g2o/core/structure_only_solver.h"
#include "g2o/types/slam3d/vertex_se3_quat.h"
#include "g2o/types/slam3d/edge_se3_quat.h"

//other
#include <stdio.h>
#include <string.h>
#include "RGBDFrame.h"

//#include "FrameMatcher.h"
//#include "SurfRansacMatcherI.h"
//#include "JCMergeMatcherI.h"
//#include "JCSearchMatcherI.h"
//#include "RGBDCamera.h"
//#include "myutils.h"
#include <string>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>
#include <pcl/filters/passthrough.h>
//#include "Transformation.h" 


using namespace std;
class RGBDFrame;
class Transformation;

namespace cvap_6D_slam {
	class Map
	{
		public:
		
		vector<RGBDFrame *> frames;
		//FrameMatcher * matcher;
		//FeatureExtractor * extractor;
		
		Map();
		~Map(); 
		
		boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
		/*
		void addFrame(RGBDFrame * frame);
		g2o::VertexSE3 * getG2OVertex(RGBDFrame * frame);
		g2o::SparseOptimizer * startNewGraph();

		void clearGraph();
		void resetGraph();
		void optimizeGraph();
		void setVisualization(boost::shared_ptr<pcl::visualization::PCLVisualizer> view);
		
		private:
		g2o::SparseOptimizer	graphoptimizer;
		*/
	};
}
#endif
